为什么在“ 您所在的位置:网站首页 shell command 变量 为什么在“

为什么在“

2023-05-31 14:40| 来源: 网络整理| 查看: 265

先看这个信息

“-bash: XX: command not found”

直译过来就是bash找不到相应的命令前文里我们提到这个问题是由于"PATH"设置出错导致我们输入这些常用命令如"ls","cat","vim"等我们之前解决这个问题的方法是

'键入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"'

那么关键信息就是这个名为"PATH"的变量首先我们在初始化的系统(阿里云自带的centos)下键入"echo $PATH"

image

出现了以下结果

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

我们根据给出的路径进行查找

/usr/local/sbin

image

什么也没

/usr/local/bin

image

还是什么都没

/usr/bin以及最后的 /bin

image

刷的一下,满满的绿色,有意思的是这两个文件夹显示完全内容一样,有兴趣的可以用“pwd”和"mkdir"试试

我们来 “find” 一下

image

果不其然,我们常用的命令都在这里不过我们之前用来解决问题的"export"看起来并不在这里,这一点我们之后再谈

现在我们找到了放置常用命令 "ls","vim"等的放置地下一步我们来找一下为什么"PATH"设置错误后所有的"/bin"路径下的命令都变成不可用的了

首先我们要知道这几个文件

/etc/profile$HOME/.bash_profile$HOME/.bashrc

其中 /etc/profile文件是系统上默认的bash shell的主启动文件,系统上的每个用户登录时都会执行这个启动文件让我们打开它看看

image

我们需要看的是它的头和尾

头部

image

头部"pathmunge"函数的作用:判断当前系统的PATH中是否有该命令的目录,如果没有,则判断是要将该目录放于PATH之前还是之后。什么情况下没有呢?我们可以看看这里的case语句:根据冒号分割的参数“$1”是的话则通过否则判断“$2”的参数,是的话通过,不是的话将“$1”代表的参数放至末尾。

尾部

image

尾部使用for语句来迭代/etc/profile.d目录下的所有文件。这为Linux系统提供了一个放置特定应用程序启动文件的地方。当用户登录时,shell会执行这些文件。我们可以去看看。

image

现在让我们回到一开始的问题,

为什么在“-bash: XX: command not found”下常用命令如“cat”,“ls”变得不可用?

答:因为用来查询命令的“PATH”环境变量设置出错(多半是格式出错导致的路径覆盖)导致Linux系统执行/etc/profile文件中的"pathmunge"函数找不到对应的路径。于是放置于原先路径下的常用命令就变得不可用了。

PS/usr 软件放置处 与我们常用的软件有关/root(/,根目录) 开机系统相关/bin 放置一些系统必备脚本

case语句会检查每个参数是不是有效选项。是的话就执行对应case语句中的命令。不管选项按什么顺序出现在命令行上,这种方法都适用。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有